﻿using Cherry.Agile.Enterprise.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;

namespace Cherry.Agile.Enterprise.Services.Interface
{
        [ServiceContract(Namespace = Unity.Namespace)]
    public interface IRoleEmpInfoService
    {
        /// <summary>
        /// 获取角色员工映射信息
        /// </summary>
        /// <returns>角色员工映射信息</returns>
        [OperationContract]
        List<RoleStaffInfo> SyncRoleEmpInfo();

        /// <summary>
        /// 获取角色员工映射信息
        /// </summary>
        /// <returns>角色员工映射信息</returns>
        [OperationContract]
        List<RoleStaffInfo> GetRoleEmps();

        /// <summary>
        /// 传入空。不做处理。请调用 DeleteRoleEmpInfoByDrId(dmployeeId)进行删除
        /// 增加或修改一个医生的角色信息(备注:list项目中医生ID必须是一样的)       
        /// 内部操作步骤为 1、删除ID下所有角色 2、增加新的角色关联信息
        /// </summary>
        /// <param name="roleDrInfoList">输入该医生的新的医生角色关联信息</param>
        [OperationContract]
        void UpdateRoleForOneEmployee(List<RoleStaffInfo> newRoleEmpInfoList);

        /// <summary>
        /// 根据医生ID删除该医生的角色关联信息
        /// </summary>
        /// <param name="dmployeeRoleId">医生ID</param>        
        [OperationContract]
        void DeleteRoleEmpInfoByEmpId(int dmployeeId);

        /// <summary>
        /// 查询医生角色关系列表
        /// </summary>
        /// <param name="dmployeeID">医生ID</param>
        /// <returns>医生角色关系列表</returns>    
        [OperationContract]
        List<RoleStaffInfo> GetEmployeeRoleListByEmployeeId(int dmployeeId);

        /// <summary>
        /// 根据角色id获取该角色下医护人员的id
        /// </summary>
        /// <param name="roleID">角色id</param>
        /// <returns></returns>
        [OperationContract]
        List<int> GetDrIDListByRoleID(int roleID);
        /// <summary>
        /// 增加医生角色关联信息
        /// </summary>
        /// <param name="rdinfo">角色医生关系列表</param>
        [OperationContract]
        void AddRoleEmpInfo(List<RoleStaffInfo> rdinfo);
        /// <summary>
        /// 删除医生角色关联信息
        /// </summary>
        /// <param name="rdinfo">角色医生关系列表</param>
        [OperationContract]
        void DeleteRoleEmpInfo(int[] rdinfo);
        /// <summary>
        /// 判断是否存在
        /// </summary>
        /// <param name="roleID"></param>
        /// <param name="drID"></param>
        /// <returns></returns>
        [OperationContract]
        List<int> IsExistRoleEmpInfo(int roleID, List<int> drID);
        /// <summary>
        /// 删除该角色所有与用户的关联信息
        /// </summary>
        /// <param name="roleID"></param>
        [OperationContract]
        void DelRoleEmpInfoByRoleId(int[] roleID);

        /// <summary>
        /// 根据角色列表取医生
        /// </summary>
        /// <param name="roleId">角色列表</param>
        /// <returns>医生</returns>
        [OperationContract]
        List<int> GetEmployeesByRoles(int[] roleId);
    }
}
